home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / ImportPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  6.5 KB  |  343 lines

  1. /*
  2. **    ImportPanel.c
  3. **
  4. **    Editing panel for phone unit settings
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_LIST=1,GAD_REPLACE,GAD_APPEND,GAD_CANCEL };
  17.  
  18.     /* ImportListViewRender():
  19.      *
  20.      *    This callback routine is responsible for rendering
  21.      *    the single listview entries.
  22.      */
  23.  
  24. STATIC ULONG __saveds __asm
  25. ImportListViewRender(REG(a0) struct Hook *Hook,REG(a1) struct LVDrawMsg *Msg,REG(a2) struct Node *Node)
  26. {
  27.         /* We only know how to redraw lines. */
  28.  
  29.     if(Msg->lvdm_MethodID == LV_DRAW)
  30.     {
  31.         struct RastPort    *RPort    = Msg->lvdm_RastPort;
  32.         LONG             Left    = Msg->lvdm_Bounds.MinX,
  33.                          Top    = Msg->lvdm_Bounds.MinY,
  34.                          Width    = Msg->lvdm_Bounds.MaxX - Msg->lvdm_Bounds.MinX + 1,
  35.                          Height    = Msg->lvdm_Bounds.MaxY - Msg->lvdm_Bounds.MinY + 1,
  36.                          FgPen,BgPen,
  37.                          Len,LabelLen;
  38.         STRPTR             String;
  39.         UWORD            *Pens;
  40.  
  41.         Pens = Msg->lvdm_DrawInfo->dri_Pens;
  42.  
  43.         String = &Node->ln_Name[6];
  44.  
  45.             /* Determine the rendering pens. */
  46.  
  47.         if(Msg->lvdm_State == LVR_SELECTED)
  48.         {
  49.             FgPen = FILLTEXTPEN;
  50.             BgPen = FILLPEN;
  51.         }
  52.         else
  53.         {
  54.             FgPen = TEXTPEN;
  55.             BgPen = BACKGROUNDPEN;
  56.         }
  57.  
  58.         FgPen = Pens[FgPen];
  59.         BgPen = Pens[BgPen];
  60.  
  61.             /* Set the rendering pens. */
  62.  
  63.         SetABPenDrMd(RPort,BgPen,BgPen,JAM2);
  64.         RectFill(RPort,Left,Top,Left + 1,Top + Height - 1);
  65.  
  66.         Left    += 2;
  67.         Width    -= 2;
  68.  
  69.             /* Determine length of vanilla name. */
  70.  
  71.         LabelLen = strlen(String);
  72.  
  73.             /* Try to make it fit. */
  74.  
  75.         while(LabelLen > 0 && (Len = TextLength(RPort,String,LabelLen)) > Width)
  76.             LabelLen--;
  77.  
  78.             /* Print the vanilla name if possible. */
  79.  
  80.         if(LabelLen)
  81.         {
  82.             SetAPen(RPort,FgPen);
  83.  
  84.             PlaceText(RPort,Left,Top,String,LabelLen);
  85.  
  86.             Left    += Len;
  87.             Width    -= Len;
  88.         }
  89.  
  90.             /* Fill the area to follow the vanilla name. */
  91.  
  92.         if(Width > 0)
  93.         {
  94.             SetAPen(RPort,BgPen);
  95.             FillBox(RPort,Left,Top,Width,Height);
  96.         }
  97.  
  98.             /* If the item happens to be disabled, draw the cross-hatch
  99.              * pattern across it.
  100.              */
  101.  
  102.         ListViewStateFill(Msg);
  103.  
  104.         return(LVCB_OK);
  105.     }
  106.     else
  107.         return(LVCB_UNKNOWN);
  108. }
  109.  
  110. BOOL
  111. ImportPanel(struct Window *Parent,struct PhoneEntry *Entry,struct List *PhoneList,struct List *TimeDateList)
  112. {
  113.     struct LayoutHandle    *Handle;
  114.     BOOL                 MadeChanges = FALSE;
  115.  
  116.     if(!TimeDateList)
  117.         TimeDateList = (struct List *)&Entry->TimeDateList;
  118.  
  119.     if(Handle = LT_CreateHandleTags(Parent->WScreen,
  120.         LH_LocaleHook,    &LocaleHook,
  121.     TAG_DONE))
  122.     {
  123.         struct Window *PanelWindow;
  124.  
  125.         LT_New(Handle,
  126.             LA_Type,    VERTICAL_KIND,
  127.         TAG_DONE);
  128.         {
  129.             LT_New(Handle,
  130.                 LA_Type,    VERTICAL_KIND,
  131.             TAG_DONE);
  132.             {
  133.                 STATIC struct Hook ListViewHook =
  134.                 {
  135.                     {NULL},
  136.                     (HOOKFUNC)ImportListViewRender
  137.                 };
  138.  
  139.                 LONG i,Index = -1,MaxHeight;
  140.  
  141.                 for(i = 0 ; i < NumPhoneEntries ; i++)
  142.                 {
  143.                     if(Entry == Phonebook[i])
  144.                     {
  145.                         Index = i;
  146.  
  147.                         break;
  148.                     }
  149.                 }
  150.  
  151.                 if(NumPhoneEntries < 10)
  152.                     MaxHeight = 10;
  153.                 else
  154.                 {
  155.                     if(NumPhoneEntries > 20)
  156.                         MaxHeight = 20;
  157.                     else
  158.                         MaxHeight = NumPhoneEntries;
  159.                 }
  160.  
  161.                 LT_New(Handle,
  162.                     LA_Type,        LISTVIEW_KIND,
  163.                     LA_LabelID,        MSG_V36_0088,
  164.                     LA_ID,            GAD_LIST,
  165.                     LA_Chars,        50,
  166.                     LA_Lines,        10,
  167.                     LALV_Link,        NIL_LINK,
  168.                     LALV_CursorKey,    TRUE,
  169.                     LALV_MaxGrowY,    MaxHeight,
  170.                     LALV_ResizeY,    TRUE,
  171.                     GTLV_Selected,    Index,
  172.                     GTLV_CallBack,    &ListViewHook,
  173.                     GTLV_Labels,    PhoneList,
  174.                     GTLV_MaxPen,    GetListMaxPen(Handle->DrawInfo->dri_Pens),
  175.                 TAG_DONE);
  176.  
  177.                 LT_EndGroup(Handle);
  178.             }
  179.  
  180.             LT_New(Handle,
  181.                 LA_Type,VERTICAL_KIND,
  182.             TAG_DONE);
  183.             {
  184.                 LT_New(Handle,
  185.                     LA_Type,        XBAR_KIND,
  186.                     LAXB_FullSize,    TRUE,
  187.                 TAG_DONE);
  188.  
  189.                 LT_EndGroup(Handle);
  190.             }
  191.  
  192.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  193.                 LAGR_Spread,    TRUE,
  194.             TAG_DONE);
  195.             {
  196.                 LT_New(Handle,
  197.                     LA_Type,        BUTTON_KIND,
  198.                     LA_LabelID,        MSG_IMPORTPANEL_REPLACE_RATES_GAD,
  199.                     LA_ID,            GAD_REPLACE,
  200.                     GA_Disabled,    TRUE,
  201.                     LABT_ExtraFat,    TRUE,
  202.                 TAG_DONE);
  203.  
  204.                 LT_New(Handle,
  205.                     LA_Type,        BUTTON_KIND,
  206.                     LA_LabelID,        MSG_IMPORTPANEL_APPEND_RATES_GAD,
  207.                     LA_ID,            GAD_APPEND,
  208.                     GA_Disabled,    TRUE,
  209.                     LABT_ExtraFat,    TRUE,
  210.                 TAG_DONE);
  211.  
  212.                 LT_New(Handle,
  213.                     LA_Type,        BUTTON_KIND,
  214.                     LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  215.                     LA_ID,            GAD_CANCEL,
  216.                     LABT_EscKey,    TRUE,
  217.                     LABT_ExtraFat,    TRUE,
  218.                 TAG_DONE);
  219.  
  220.                 LT_EndGroup(Handle);
  221.             }
  222.  
  223.             LT_EndGroup(Handle);
  224.         }
  225.  
  226.         if(PanelWindow = LT_Build(Handle,
  227.             LAWN_TitleID,        MSG_IMPORTPANEL_IMPORT_RATES_TXT,
  228.             LAWN_IDCMP,            IDCMP_CLOSEWINDOW,
  229.             LAWN_HelpHook,        &GuideHook,
  230.             LAWN_Parent,        Parent,
  231.             WA_DepthGadget,        TRUE,
  232.             WA_CloseGadget,        TRUE,
  233.             WA_DragBar,            TRUE,
  234.             WA_RMBTrap,            TRUE,
  235.             WA_Activate,        TRUE,
  236.             WA_SimpleRefresh,    TRUE,
  237.         TAG_DONE))
  238.         {
  239.             struct IntuiMessage    *Message;
  240.             BOOL                 Done = FALSE;
  241.             ULONG                 MsgClass;
  242.             UWORD                 MsgCode;
  243.             struct Gadget        *MsgGadget;
  244.             LONG                 Selected = ~0;
  245.  
  246.             GuideContext(CONTEXT_IMPORT);
  247.  
  248.             LT_ShowWindow(Handle,TRUE);
  249.  
  250.             PushWindow(PanelWindow);
  251.  
  252.             do
  253.             {
  254.                 if(Wait(PORTMASK(PanelWindow->UserPort) | SIG_BREAK) & SIG_BREAK)
  255.                     break;
  256.  
  257.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  258.                 {
  259.                     MsgClass    = Message->Class;
  260.                     MsgCode        = Message->Code;
  261.                     MsgGadget    = (struct Gadget *)Message->IAddress;
  262.  
  263.                     LT_ReplyIMsg(Message);
  264.  
  265.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  266.                         Done = TRUE;
  267.  
  268.                     if(MsgClass == IDCMP_GADGETUP)
  269.                     {
  270.                         switch(MsgGadget->GadgetID)
  271.                         {
  272.                             case GAD_LIST:
  273.  
  274.                                 if(Entry != Phonebook[MsgCode])
  275.                                 {
  276.                                     if(Selected == ~0)
  277.                                     {
  278.                                         LT_SetAttributes(Handle,GAD_REPLACE,
  279.                                             GA_Disabled,    FALSE,
  280.                                         TAG_DONE);
  281.  
  282.                                         LT_SetAttributes(Handle,GAD_APPEND,
  283.                                             GA_Disabled,    FALSE,
  284.                                         TAG_DONE);
  285.                                     }
  286.  
  287.                                     Selected = MsgCode;
  288.                                 }
  289.                                 else
  290.                                 {
  291.                                     if(Selected != ~0)
  292.                                     {
  293.                                         LT_SetAttributes(Handle,GAD_REPLACE,
  294.                                             GA_Disabled,    TRUE,
  295.                                         TAG_DONE);
  296.  
  297.                                         LT_SetAttributes(Handle,GAD_APPEND,
  298.                                             GA_Disabled,    TRUE,
  299.                                         TAG_DONE);
  300.  
  301.                                         Selected = ~0;
  302.                                     }
  303.                                 }
  304.  
  305.                                 break;
  306.  
  307.                             case GAD_APPEND:
  308.  
  309.                                 CopyTimeDateList((struct List *)&Phonebook[Selected]->TimeDateList,TimeDateList,TRUE);
  310.  
  311.                                 Done = MadeChanges = TRUE;
  312.  
  313.                                 break;
  314.  
  315.                             case GAD_REPLACE:
  316.  
  317.                                 FreeTimeDateList(TimeDateList);
  318.  
  319.                                 CopyTimeDateList((struct List *)&Phonebook[Selected]->TimeDateList,TimeDateList,FALSE);
  320.  
  321.                                 Done = MadeChanges = TRUE;
  322.  
  323.                                 break;
  324.  
  325.                             case GAD_CANCEL:
  326.  
  327.                                 Done = TRUE;
  328.                                 break;
  329.                         }
  330.                     }
  331.                 }
  332.             }
  333.             while(!Done);
  334.  
  335.             PopWindow();
  336.         }
  337.  
  338.         LT_DeleteHandle(Handle);
  339.     }
  340.  
  341.     return(MadeChanges);
  342. }
  343.